// 获取短信验证码
const rand = require('../util/random')
const client = require('../util/note')
const phoneAndCode = []

// 5分钟删除数组中的一个元素
function deletePhone (phone) {
  setTimeout(() => {
    if(phoneAndCode.findIndex(item => item.phone === phone) !== -1){
      phoneAndCode.splice(phoneAndCode.findIndex(item => item.phone === phone), 1)
    }
  }, 5 * 1000 * 1000 )
}
/* 请求参数，根据调用的接口和实际情况，可以进一步设置请求参数
* 属性可能是基本类型，也可能引用了另一个数据结构
* 推荐使用IDE进行开发，可以方便的跳转查阅各个接口和数据结构的文档说明 */
const params = {
  /* 短信应用ID: 短信SmsSdkAppId在 [短信控制台] 添加应用后生成的实际SmsSdkAppId，示例如1400006666 */
  SmsSdkAppId: "1400557351",
  /* 短信签名内容: 使用 UTF-8 编码，必须填写已审核通过的签名，签名信息可登录 [短信控制台] 查看 */
  SignName: "DoMain技术博客",
  /* 下发手机号码，采用 e.164 标准，+[国家或地区码][手机号]
   * 示例如：+8613711112222， 其中前面有一个+号 ，86为国家码，13711112222为手机号，最多不要超过200个手机号*/
  PhoneNumberSet: [],
  /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
  TemplateId: "1069322",
  /* 模板参数: 若无模板参数，则设置为空*/
  TemplateParamSet: [],
}

exports.getMessage = async (req, res, next) => {
  try {
    const { phone }  = req.body.user
    const randomNum = rand(1000, 9999)
    params.PhoneNumberSet = [phone]
    params.TemplateParamSet = [randomNum]
    // 处理请求
    // 通过client对象调用想要访问的接口，需要传入请求对象以及响应回调函数
    client.SendSms(params, function (err, response) {
      // 请求异常返回，打印异常信息
      if (err) {
        console.log(err)
        res.send('短信发送失败,请稍后再试')
        return
      }
      // 请求正常返回，打印response对象
      console.log(response)
      if(response.SendStatusSet[0].Code === 'Ok') {
        // 发送成功后需要判断 phoneAndCode 数组中是否已存在手机号 如果有删除
        if(phoneAndCode.findIndex(item => item.phone === phone) !== -1){
          phoneAndCode.splice(phoneAndCode.findIndex(item => item.phone === phone), 1)
        }
        phoneAndCode.push({ phone, code: randomNum })
        deletePhone(phone)
        res.send('短信发送成功')
        return
      }

      res.send('短信发送失败,请稍后再试')
      
    })
  } catch (err) {
    next(err)
  }
}
exports.phoneAndCode = phoneAndCode
